package com.pubsys.main.client.paginas.inserir.view;

import java.util.ArrayList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.IntegerBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.datepicker.client.DateBox;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.TextArea;
import com.pubsys.main.shared.model.Autor;
import com.pubsys.main.shared.model.Editora;
import com.pubsys.main.shared.model.Monografia;
import com.pubsys.main.shared.model.Monografia.TYPE_MONOGRAFIA;
import com.pubsys.main.shared.model.Referencia;
import com.pubsys.main.shared.model.Referencia.ABRANG;
import com.pubsys.main.shared.model.Referencia.TYPE_COMP_RES;
import com.pubsys.main.shared.model.Referencia.TYPE_RESUMO;
import com.pubsys.main.client.componentes.botao.ButtonWidget;
import com.pubsys.main.client.componentes.monografiafields.CamposMonografiaWidget;
import com.pubsys.main.client.componentes.normafields.CamposNormaWidget;
import com.pubsys.main.client.componentes.partemonografiafields.CamposParteMonografiaWidget;
import com.pubsys.main.client.componentes.rfcfields.CamposRFCWidget;
import com.pubsys.main.client.componentes.trabindividualfields.CamposTrabIndividualWidget;
import com.google.gwt.user.client.ui.SimplePanel;

public class InsercaoUI extends Composite {

	private static InsercaoUIUiBinder uiBinder = GWT
			.create(InsercaoUIUiBinder.class);
	@UiField Button inserirButton;
	@UiField TextArea testeTextArea;
	@UiField SimplePanel panelDoWidgetQueEuQuero;
	@UiField Grid grid;
	@UiField ListBox tipoRefListBox;
	
	private CamposMonografiaWidget painelMonografia;
	private CamposParteMonografiaWidget painelParteMonografia;
	private CamposTrabIndividualWidget painelTrabIndividual;
	private CamposRFCWidget painelRFC;
	private CamposNormaWidget paienlNorma;
	

	interface InsercaoUIUiBinder extends UiBinder<Widget, InsercaoUI> {
	}

	public InsercaoUI() {
		initWidget(uiBinder.createAndBindUi(this));
		iniListBox();
		camposSempreVisiveis();
		iniForm();
	}
	
	private void iniListBox(){
		/* Monografia */
		tipoRefListBox.addItem("Proceeding");
		tipoRefListBox.addItem("Collention");
		tipoRefListBox.addItem("Book");
		/* Parte de Monografia */
		tipoRefListBox.addItem("Inproceeding");
		tipoRefListBox.addItem("Incollention");
		tipoRefListBox.addItem("Chapter");
		/* Trabalho Individual */
		tipoRefListBox.addItem("Individual work");
		tipoRefListBox.addItem("Dissertation");
		tipoRefListBox.addItem("Thesis");
		/* RFC */
		tipoRefListBox.addItem("RFC");
		/* Norma */
		tipoRefListBox.addItem("Norm");
	}
	
	private void iniForm(){
//		setFormMonografia();
		painelMonografia = new CamposMonografiaWidget(0);
		
		this.panelDoWidgetQueEuQuero.add(painelMonografia);
	}
	
	private void camposSempreVisiveis(){
//		abrangenciaComboBox.addItem("nacional");
//		abrangenciaComboBox.addItem("internacional");
//		
//		tipoComplResComboBox.addItem("completo");
//		tipoComplResComboBox.addItem("resumido");
//		tipoComplResComboBox.addChangeListener(this);
//		
//		tipoResumoComboBox.addItem("simples");
//		tipoResumoComboBox.addItem("expandido");
	}
	
	private void setFormMonografia(int subTipo){
		
		painelMonografia = new CamposMonografiaWidget(subTipo);
		
		this.panelDoWidgetQueEuQuero.clear();
		this.panelDoWidgetQueEuQuero.add(painelMonografia);
		
//		grid.clear();
//		grid.resizeRows(15);
//		grid.setWidget(0 , 0 , campoEstaticoLabel);						grid.setWidget(0 , 1 , tipoRefListBox);
//		grid.setWidget(1 , 0 , new Label("Título: "));					grid.setWidget(1 , 1 , new TextBox());
//		grid.setWidget(2 , 0 , new Label("Autor: "));					grid.setWidget(2 , 1 , new TextBox());
//		grid.setWidget(3 , 0 , new Label("Ano: "));						grid.setWidget(3 , 1 , new TextBox());
//		grid.setWidget(4 , 0 , new Label("Local: "));					grid.setWidget(4 , 1 , new TextBox());
//		grid.setWidget(5 , 0 , new Label("Edição: "));					grid.setWidget(5 , 1 , new TextBox());
//		grid.setWidget(6 , 0 , new Label("Editora: "));					grid.setWidget(6 , 1 , new TextBox());
//		grid.setWidget(7 , 0 , new Label("Tradutor/Revisor: "));		grid.setWidget(7 , 1 , new TextBox());
//		grid.setWidget(8 , 0 , new Label("N° de páginas "));			grid.setWidget(8 , 1 , new TextBox());
//		grid.setWidget(9 , 0 , new Label("N° do volume: "));			grid.setWidget(9 , 1 , new TextBox());
//		grid.setWidget(10 , 0 , new Label("Série: "));					grid.setWidget(10 , 1 , new TextBox());
//		grid.setWidget(11 , 0 , new Label("Coleção: "));				grid.setWidget(11 , 1 , new TextBox());
		
		/* default de referencia */
//		grid.setWidget(12 , 0 , new Label("Abrangência: "));			grid.setWidget(12 , 1 , abrangenciaComboBox);
//		grid.setWidget(13 , 0 , new Label("Completa/Resumida: "));		grid.setWidget(13 , 1 , tipoComplResComboBox);
//		grid.setWidget(14 , 0 , new Label("Data de publicação: "));		grid.setWidget(14 , 1 , new TextBox());
		
	}
	
	private void setFormParteMonografia(){
		
		painelParteMonografia = new CamposParteMonografiaWidget();
		
		this.panelDoWidgetQueEuQuero.clear();
		this.panelDoWidgetQueEuQuero.add(painelParteMonografia);
		
//		grid.clear();
//		grid.resizeRows(16);
//		grid.setWidget(0 , 0 , campoEstaticoLabel);						grid.setWidget(0 , 1 , tipoRefListBox);
//		grid.setWidget(1 , 0 , new Label("Título: "));					grid.setWidget(1 , 1 , new TextBox());
//		grid.setWidget(2 , 0 , new Label("Autor: "));					grid.setWidget(2 , 1 , new TextBox());
//		grid.setWidget(3 , 0 , new Label("Título da Monografia: "));	grid.setWidget(3 , 1 , new TextBox());
//		grid.setWidget(4 , 0 , new Label("Autor da Monografia: "));		grid.setWidget(4 , 1 , new TextBox());
//		grid.setWidget(5 , 0 , new Label("Ano: "));						grid.setWidget(5 , 1 , new TextBox());
//		grid.setWidget(6 , 0 , new Label("Local: "));					grid.setWidget(6 , 1 , new TextBox());
//		grid.setWidget(7 , 0 , new Label("Edição: "));					grid.setWidget(7 , 1 , new TextBox());
//		grid.setWidget(8 , 0 , new Label("Editora: "));					grid.setWidget(8 , 1 , new TextBox());
//		grid.setWidget(9 , 0 , new Label("Páginas referenciadas: "));	grid.setWidget(9 , 1 , new TextBox());
//		grid.setWidget(10 , 0 , new Label("Nome do Periódico: "));		grid.setWidget(10 , 1 , new TextBox());
//		grid.setWidget(11 , 0 , new Label("Volume: "));					grid.setWidget(11 , 1 , new TextBox());
//		grid.setWidget(12 , 0 , new Label("N°/ fascículo: "));			grid.setWidget(12 , 1 , new TextBox());
//		grid.setWidget(13 , 0 , new Label("Mês: "));					grid.setWidget(13 , 1 , new TextBox());
		
		/* default de referencia */
//		grid.setWidget(14 , 0 , new Label("Abrangência: "));			grid.setWidget(14 , 1 , abrangenciaComboBox);
//		grid.setWidget(15 , 0 , new Label("Completa/Resumida: "));		grid.setWidget(15 , 1 , tipoComplResComboBox);
//		grid.setWidget(16 , 0 , new Label("Data de publicação: "));		grid.setWidget(16 , 1 , new TextBox());
		
	}
	private void setFormTrabIndividual(){
		
		painelTrabIndividual = new CamposTrabIndividualWidget() ;
		this.panelDoWidgetQueEuQuero.clear();
		this.panelDoWidgetQueEuQuero.add(painelTrabIndividual);
		
//		grid.clear();
//		grid.resizeRows(10);
//		grid.setWidget(0 , 0 , campoEstaticoLabel);							grid.setWidget(0 , 1 , tipoRefListBox);
//		grid.setWidget(1 , 0 , new Label("Título: "));						grid.setWidget(1 , 1 , new TextBox());
//		grid.setWidget(2 , 0 , new Label("Autor: "));						grid.setWidget(2 , 1 , new TextBox());
//		grid.setWidget(3 , 0 , new Label("Ano: "));							grid.setWidget(3 , 1 , new TextBox());
//		grid.setWidget(4 , 0 , new Label("Local: "));						grid.setWidget(4 , 1 , new TextBox());
//		grid.setWidget(5 , 0 , new Label("N° de folhas: "));				grid.setWidget(5 , 1 , new TextBox());
//		grid.setWidget(6 , 0 , new Label("Instituição onde defendeu: "));	grid.setWidget(6 , 1 , new TextBox());
		
		/* default de referencia */
//		grid.setWidget(7 , 0 , new Label("Abrangência: "));					grid.setWidget(7 , 1 , abrangenciaComboBox);
//		grid.setWidget(8 , 0 , new Label("Completa/Resumida: "));			grid.setWidget(8 , 1 , tipoComplResComboBox);
//		grid.setWidget(9 , 0 , new Label("Data de publicação: "));			grid.setWidget(9 , 1 , new DateBox());
	}
	private void setFormRFC(){
		
		painelRFC = new CamposRFCWidget() ;
		
		this.panelDoWidgetQueEuQuero.clear();
		this.panelDoWidgetQueEuQuero.add(painelRFC);
		
//		grid.clear();
//		grid.resizeRows(9);
//		grid.setWidget(0 , 0 , campoEstaticoLabel);						grid.setWidget(0 , 1 , tipoRefListBox);
//		grid.setWidget(1 , 0 , new Label("Título: "));					grid.setWidget(1 , 1 , new TextBox());
//		grid.setWidget(2 , 0 , new Label("Ano: "));						grid.setWidget(2 , 1 , new TextBox());
//		grid.setWidget(3 , 0 , new Label("Local: "));					grid.setWidget(3 , 1 , new TextBox());
//		grid.setWidget(4 , 0 , new Label("Código: "));					grid.setWidget(4 , 1 , new TextBox());
//		grid.setWidget(5 , 0 , new Label("Working Group: "));			grid.setWidget(5 , 1 , new TextBox());
		
		/* default de referencia */
//		grid.setWidget(6 , 0 , new Label("Abrangência: "));				grid.setWidget(6 , 1 , abrangenciaComboBox);
//		grid.setWidget(7 , 0 , new Label("Completa/Resumida: "));		grid.setWidget(7 , 1 , tipoComplResComboBox);
//		grid.setWidget(8 , 0 , new Label("Data de publicação: "));		grid.setWidget(8 , 1 , new DateBox());
	}
	private void setFormNorma(){
		
		paienlNorma = new CamposNormaWidget();
		
		this.panelDoWidgetQueEuQuero.clear();
		this.panelDoWidgetQueEuQuero.add(painelRFC);
		
//		grid.clear();
//		grid.resizeRows(11);
//		grid.setWidget(0 , 0 , campoEstaticoLabel);						grid.setWidget(0 , 1 , tipoRefListBox);
//		grid.setWidget(1 , 0 , new Label("Título: "));					grid.setWidget(1 , 1 , new TextBox());
//		grid.setWidget(2 , 0 , new Label("Ano: "));						grid.setWidget(2 , 1 , new TextBox());
//		grid.setWidget(3 , 0 , new Label("Local: "));					grid.setWidget(3 , 1 , new TextBox());
//		grid.setWidget(4 , 0 , new Label("Órgão normalizador: "));		grid.setWidget(4 , 1 , new TextBox());
//		grid.setWidget(5 , 0 , new Label("N° da norma: "));				grid.setWidget(5 , 1 , new TextBox());
//		grid.setWidget(6 , 0 , new Label("Volume: "));					grid.setWidget(6 , 1 , new TextBox());
//		grid.setWidget(7 , 0 , new Label("Página: "));					grid.setWidget(7 , 1 , new TextBox());
		
		/* default de referencia */
//		grid.setWidget(8 , 0 , new Label("Abrangência: "));				grid.setWidget(8 , 1 , abrangenciaComboBox);
//		grid.setWidget(9 , 0 , new Label("Completa/Resumida: "));		grid.setWidget(9 , 1 , tipoComplResComboBox);
//		grid.setWidget(10 , 0 , new Label("Data de publicação: "));		grid.setWidget(10 , 1 , new DateBox());
	}

	
	public Button getInsertButton(){
		return inserirButton;
	}
	
	public TextArea getTextArea(){
		return testeTextArea;
	}
	
	public String getTexto(){
		TextBox campo = (TextBox)grid.getWidget(1, 1);
		
		return campo.getText();
	}
	
	public Referencia getReferencia(){
		Referencia ref;
		ref = null;
		int tipo = tipoRefListBox.getSelectedIndex();
		switch(tipo){
		case 0:  /*Proceeding*/			
		case 1:  /*Collention*/			
		case 2:  /*Book*/			
			//ref = criaMonografia(tipo);
			setFormMonografia(tipo);
			break;
		case 3:  /*Inproceeding*/			
		case 4:  /*Incollention*/			
		case 5:  /*Chapter*/			
			setFormParteMonografia();
			break;
		case 6:  /*Individual work*/			
		case 7:  /*Dissertation*/			
		case 8:  /*Thesis*/			
			setFormTrabIndividual();
			break;
		case 9:  /*RFC*/			
			setFormRFC();
			break;
		case 10:  /*Norm*/			
			setFormNorma();
			break;
		}
		return ref;
	}
	
	private Monografia criaMonografia(int tipoMonogr){
		TextBox campo;
		int item;
//		campo = (TextBox)grid.getWidget(1, 1);				String titulo = campo.getText();
//		campo = (TextBox)grid.getWidget(2, 1);				String nomeAutor = campo.getText();
//		campo = (TextBox)grid.getWidget(3, 1);				String ano = campo.getText();
//		campo = (TextBox)grid.getWidget(4, 1);				String local = campo.getText();
//		campo = (TextBox)grid.getWidget(5, 1);				String edicao = campo.getText();
//		campo = (TextBox)grid.getWidget(6, 1);				Editora editora = new Editora(campo.getText());
//		campo = (TextBox)grid.getWidget(7, 1);				String tradRev = campo.getText();
//		campo = (TextBox)grid.getWidget(8, 1);				String nroPag = campo.getText();
//		campo = (TextBox)grid.getWidget(9, 1);				String nroVol = campo.getText();
//		campo = (TextBox)grid.getWidget(10, 1);				String serie = campo.getText();
//		campo = (TextBox)grid.getWidget(11, 1);				String colecao = campo.getText();
//
//		ArrayList<Autor> listaAutores = new ArrayList<Autor>();
//		listaAutores.add(new Autor(nomeAutor));
		
//		item = abrangenciaComboBox.getSelectedIndex();
//		ABRANG abrangencia;
//		if (item == 0) abrangencia = Referencia.ABRANG.NACIONAL;
//		else abrangencia = Referencia.ABRANG.INTERNACIONAL;
//		
//		item = tipoComplResComboBox.getSelectedIndex();
//		TYPE_COMP_RES complRes;
//		if (item == 0) complRes = Referencia.TYPE_COMP_RES.COMPLETA;
//		else complRes = Referencia.TYPE_COMP_RES.RESUMIDA;
//		
//		item = tipoResumoComboBox.getSelectedIndex();
//		TYPE_RESUMO tipoResumo;
//		if (!tipoResumoComboBox.isVisible()) tipoResumo = Referencia.TYPE_RESUMO.NONE;
//		else if (item == 0) tipoResumo = Referencia.TYPE_RESUMO.SIMPLES;
//		else tipoResumo = Referencia.TYPE_RESUMO.EXPANDIDO;
//		
//		int nroLinhas = grid.getRowCount();
//		campo = (TextBox)grid.getWidget(nroLinhas-1, 1);	String data = campo.getText();
//		
//		TYPE_MONOGRAFIA tipo;
//		if(tipoMonogr == 0) tipo = Monografia.TYPE_MONOGRAFIA.PROCEEDING;
//		else if(tipoMonogr == 1) tipo = Monografia.TYPE_MONOGRAFIA.COLLENTION;
//		else tipo = Monografia.TYPE_MONOGRAFIA.BOOK;		
//		
//		/* inicializacao, se nao dá erro o metodo Integer.parseInt() */
//		ano = "0";
//		nroPag = "0";
//		nroVol = "0";
//		Monografia monografia = new Monografia(titulo, listaAutores, Integer.parseInt(ano), local, edicao, editora, tradRev, 
//												Integer.parseInt(nroPag), Integer.parseInt(nroVol) , serie, colecao, tipo, 
//												abrangencia, complRes, tipoResumo);
//		
		Monografia monografia = null;
		return monografia;
	}
	@UiHandler("tipoRefListBox")
	void onTipoRefListBoxChange(ChangeEvent event) {
		int tipo = tipoRefListBox.getSelectedIndex();
		switch(tipo){
		case 0:  /*Proceeding*/			
		case 1:  /*Collention*/			
		case 2:  /*Book*/			
			//ref = criaMonografia(tipo);
			setFormMonografia(tipo);
			break;
		case 3:  /*Inproceeding*/			
		case 4:  /*Incollention*/			
		case 5:  /*Chapter*/			
			setFormParteMonografia();
			break;
		case 6:  /*Individual work*/			
		case 7:  /*Dissertation*/			
		case 8:  /*Thesis*/			
			setFormTrabIndividual();
			break;
		case 9:  /*RFC*/			
			setFormRFC();
			break;
		case 10:  /*Norm*/			
			setFormNorma();
			break;
		}
	}
}
